/*
 * @author ${user}
 * @date ${year}-${month}-${day}
 */

package net.xdclass.manager.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.xdclass.manager.ProductOrderManager;
import net.xdclass.mapper.ProductOrderMapper;
import net.xdclass.model.ProductOrderDO;
import net.xdclass.vo.ProductOrderVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

@Component
public class ProductOrderManagerImpl implements ProductOrderManager {
	@Autowired
	private ProductOrderMapper productOrderMapper;

	@Override
	public int add(ProductOrderDO productOrderDO) {
		int rows = productOrderMapper.insert(productOrderDO);
		return rows;
	}

	@Override
	public ProductOrderDO findByOutTradeNoAndAccountNo(String outTradeNo, Long accountNo) {
		ProductOrderDO productOrderDO = productOrderMapper.selectOne(new QueryWrapper<ProductOrderDO>()
		.eq("out_trade_no",outTradeNo).eq("account_no",accountNo));
		return productOrderDO;
	}

	@Override
	public int updateOrderPayState(String outTradeNo, Long accountNo, String newState, String oldState) {
		int rows = productOrderMapper.update(null,new UpdateWrapper<ProductOrderDO>()
				.eq("out_trade_no",outTradeNo)
		        .eq("account_no",accountNo)
		        .eq("state",oldState)
		        .set("state",newState));

		return rows;
	}

	@Override
	public Map<String, Object> page(int page, int size, Long accountNo, String state) {
		Page  <ProductOrderDO> pageInfo = new Page(page,size);
		IPage <ProductOrderDO> iPage;
		if(StringUtils.isBlank(state)){
			iPage= productOrderMapper.selectPage(pageInfo,new QueryWrapper<ProductOrderDO>()
		.eq("account_no",accountNo)
		.eq("del",0));
		} else {
			iPage= productOrderMapper.selectPage(pageInfo,new QueryWrapper<ProductOrderDO>()
					.eq("account_no",accountNo)
					.eq("del",0)
					.eq("state",state));
		}
		Map map = new HashMap();
		map.put("total_record",iPage.getTotal());
		map.put("total_page",iPage.getPages());
		map.put("current_data",iPage.getRecords().stream().map(obj ->{
			ProductOrderVO productOrderVO = new ProductOrderVO();
			BeanUtils.copyProperties(obj,productOrderVO);
			return productOrderVO;
		}).collect(Collectors.toList()));
		return map;
	}

	@Override
	public int del(Long productOrderId, Long accountNo) {
		int rows = productOrderMapper.update(null,new UpdateWrapper<ProductOrderDO>()
				.eq("account_no",accountNo)
				.eq("product_id",productOrderId)
				.set("del",0));
		return rows;
	}
}
